package br.edu.ifrn.mb;

import java.io.IOException;
import java.util.List;

import org.apache.myfaces.custom.fileupload.UploadedFile;

import br.edu.ifrn.dao.InstrumentoConclusaoDAO;
import br.edu.ifrn.dao.OrientacaoDAO;
import br.edu.ifrn.dominio.InstrumentoConclusao;
import br.edu.ifrn.dominio.Mailer;
import br.edu.ifrn.dominio.Orientacao;
import br.edu.ifrn.exception.NegocioException;
import br.edu.ifrn.generic.GenericDAO;
import br.edu.ifrn.mb.generic.GenericCrudMB;
import br.edu.ifrn.util.FacesUtil;

public class ManageOrientacao extends GenericCrudMB<Orientacao> {
	
	private String matriculaNomeAlunoPesquisa;
	private InstrumentoConclusao instrumentoConclusaoSelecionado;
	private UploadedFile anexoFinal;
	
	public ManageOrientacao() {
		super();
		this.exibirTodosRegistrosAoPesquisar = false;
	}
	
	@Override
	protected GenericDAO<Orientacao> getDao() {
		return new OrientacaoDAO();
	}
	
	@Override
	public void incluirImpl() throws NegocioException {
		InstrumentoConclusao instrumento = this.dadosForm.getInstrumentoConclusao();
		if(this.dadosForm.isFinalizarInstrumento()){
			instrumento.setFinalizado(true);
			if(anexoFinal != null ){
				try {
					instrumento.setAnexoFinal(anexoFinal.getBytes());
				} catch (IOException e) {
					FacesUtil.adicionarMensagemErro(e.getMessage());
					throw new NegocioException("Erro ao carregar anexo");
				}
			}else{
				throw new NegocioException("Para finalizar Instrumento é necessário anexar um arquivo final do trabalho");
			}
			
			new InstrumentoConclusaoDAO().alterar(instrumento);
		}
		try {
			Mailer.sendMail(FacesUtil.getSessionUser().getUsuario(), this.dadosForm.getInstrumentoConclusao().getAluno().getEmail(), "[CICC - Orientação] "+this.dadosForm.getTitulo(), this.dadosForm.getMensagem());
		} catch (Exception e) {
			FacesUtil.adicionarMensagemErro("Erro ao enviar email.");
		}
		super.incluirImpl();
	};

	@Override
	public String getTitulo() {
		return "Orientação";
	}

	@Override
	public void pesquisarImpl() throws NegocioException {
		super.pesquisarImpl();
	}

	public void doNothing(){
	}
	public void setMatriculaNomeAlunoPesquisa(String matriculaNomeAlunoPesquisa) {
		this.matriculaNomeAlunoPesquisa = matriculaNomeAlunoPesquisa;
	}

	public String getMatriculaNomeAlunoPesquisa() {
		return matriculaNomeAlunoPesquisa;
	}
	
	public void filtrar() throws NegocioException {
		if(this.instrumentoConclusaoSelecionado != null){
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE orientacao.instrumentoConclusao.id = "+this.instrumentoConclusaoSelecionado.getId(), "Order by orientacao.dataCriacao DESC");
		}
	}
	
	public List<InstrumentoConclusao> getInstrumentosConclusao(){
		return FacesUtil.getSessionUser().getUsuario().getInstrumentosAbertos();
	}
	public List<InstrumentoConclusao> getTodosInstrumentosConclusao(){
		return FacesUtil.getSessionUser().getUsuario().getTodosInstrumentosConclusao();
	}

	public void setInstrumentoConclusaoSelecionado(
			InstrumentoConclusao instrumentoConclusaoSelecionado) {
		this.instrumentoConclusaoSelecionado = instrumentoConclusaoSelecionado;
	}

	public InstrumentoConclusao getInstrumentoConclusaoSelecionado() {
		return instrumentoConclusaoSelecionado;
	}

	public void setAnexoFinal(UploadedFile anexoFinal) {
		this.anexoFinal = anexoFinal;
	}

	public UploadedFile getAnexoFinal() {
		return anexoFinal;
	}

}
